import ProductModel from '../models/product.model';
import { ObjectType } from '../types';
import {BaseInsertDto, BaseUpdateDto} from './.dto';

/** 产品列表DTO */
export class ProductListDto implements ObjectType, Partial<ProductModel> {
  id: string = '';
  name: string = '';
  price: number = 0;
  stock: number = 0;
}

/** 产品单个DTO */
export class ProductSingleDto implements ObjectType, Partial<ProductModel> {
  id: string = '';
  name: string = '';
  price: number = 0;
  stock: number = 0;
}

/** 产品创建DTO */
export class ProductCreateDto extends BaseInsertDto implements Partial<ProductModel> {
  name: string = '';
  price: number = 0;
  stock: number = 0;
}

/** 产品更新DTO */
export class ProductUpdateDto extends BaseUpdateDto implements Partial<ProductModel> {
  name: string = '';
  price: number = 0;
  stock: number = 0;
}

/**
 * @swagger
 * components:
 *   schemas:
 *     ProductListDto:
 *       type: object
 *       properties:
 *         id:
 *           type: integer
 *           description: 产品的唯一标识符
 *           example: 1
 *         name:
 *           type: string
 *           description: 产品名称，描述产品的基本信息
 *           example: '产品A'
 *         price:
 *           type: number
 *           description: 产品价格，表示产品的销售价格
 *           example: 99.99
 *         stock:
 *           type: integer
 *           description: 产品库存数量，表示可用的产品数量
 *           example: 100
 *     ProductSingleDto:
 *       allOf:
 *         - $ref: '#/components/schemas/ProductListDto'
 *     ProductCreateDto:
 *       type: object
 *       properties:
 *         name:
 *           type: string
 *           description: 产品名称，描述产品的基本信息
 *           example: '产品A'
 *         price:
 *           type: number
 *           description: 产品价格，表示产品的销售价格
 *           example: 99.99
 *         stock:
 *           type: integer
 *           description: 产品库存数量，表示可用的产品数量
 *           example: 100
 *     ProductUpdateDto:
 *       type: object
 *       properties:
 *         name:
 *           type: string
 *           description: 产品名称，描述产品的基本信息
 *           example: '产品A'
 *         price:
 *           type: number
 *           description: 产品价格，表示产品的销售价格
 *           example: 99.99
 *         stock:
 *           type: integer
 *           description: 产品库存数量，表示可用的产品数量
 *           example: 100
 */
